﻿#define _CRT_SECURE_NO_WARNINGS 1

//void Swap(int& left, int& right)
//{
//	int temp = left;
//	left = right;
//	right = temp;
//}
//void Swap(double& left, double& right)
//{
//	double temp = left;
//	left = right;
//	right = temp;
//}
//void Swap(char& left, char& right)
//{
//	char temp = left;
//	left = right;
//	right = temp;
//}


//template<class T>
//T Add(const T& left, const T& right)
//{
//	return left + right;
//}
//int main()
//{
//	int a1 = 10, a2 = 20;
//	double d1 = 10.0, d2 = 20.0;
//	int asum = Add(a1, a2);
//	double dsum = Add(d1, d2);
//	Add(a1, (int)d1);
//
//	return 0;
//}
//int main(void)
//{
//	int a = 10;
//	double b = 20.0;
//
//	// 显式实例化
//	Add<int>(a, b);
//	return 0;
//}

// 专门处理int的加法函数
int Add(int left, int right)
{
	return left + right;
}

// 通用加法函数
template<class T>
T Add(T left, T right)
{
	return left + right;
}

//void Test()
//{
//	Add(1, 2);     // 与非函数模板类型完全匹配，不需要函数模板实例化
//	Add(1, 2.0);   // 模板函数可以生成更加匹配的版本，编译器根据实参生成更加匹配的Add函数
//}

//void Test()
//{
//	Add(1, 2);       // 与非模板函数匹配，编译器不需要特化
//	Add<int>(1, 2);  // 调用编译器特化的Add版本
//}
//
//int main()
//{
//	Test();
//	return 0;
//}


//int main(void)
//{
//	int a = 10;
//	double b = 20.0;
//
//	
//	// 显式实例化
//
//	Add(a, (int)b);
//	return 0;
//}


#include<iostream>
using namespace std;
// 类模版
template<typename T>
class Stack
{
public:
	Stack(size_t capacity = 4)
	{
		_array = new T[capacity];
		_capacity = capacity;
		_size = 0;
	}
	void Push(const T& data);
private:
	T* _array;
	size_t _capacity;
	size_t _size;
};
// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误
template<class T>
void Stack<T>::Push(const T& data)
{
	// 扩容
	_array[_size] = data;
	++_size;
}

#include<vector>
using namespace std;

class Solution {
public:
    static void duplicateZeros(vector<int>& arr) {
        // 大思路：从后往前复写

        // 1.找开始复写的位置
        int n = arr.size();
        int dest = -1, cur = 0;
        for (; dest < n-1; ++cur) {
            if (arr[cur] == 0)
                dest += 2;
            else
                dest += 1;
        }
        --cur;
        // 1.5.特殊情况需处理，dest+=2之后直接等于n
        if (dest == n) {
            arr[dest - 1] = arr[cur];
            dest -= 2;
            cur--;
        }

        // 2.开始复写
        for (; cur >= 0; --cur) {
            if (arr[cur] == 0) {
                arr[dest--] = 0;
                arr[dest--] = 0;
            }
            else
                arr[dest--] = arr[cur];
        }
    }
};
int main()
{
   /* vector<int> v = {1, 0, 2, 3, 0, 4, 5, 0};
    Solution::duplicateZeros(v);*/
    char str[10] = { 0 };
    scanf("%s", str);
    printf("%s", str);
	return 0;
}

//盛水最多的容器

class Solution {
public:
    int maxArea(vector<int>& height) {
        int left = 0, right = height.size() - 1, max = 0;

        while (left != right) {
            int hmin =
                height[left] < height[right] ? height[left] : height[right];
            if (((right - left) * hmin) > max)
                max = (right - left) * hmin;

            //谁小谁变化（++/--）
            if (hmin == height[left])
                left++;
            else
                right--;
        }

        return max;
    }
};